package dxf.entities;

import dxf.DXFPoint;
import dxf.annotations.DXFElementType;
import dxf.annotations.DXFPointProperty;
import dxf.annotations.DXFProperty;

/**
 * Un oggetto della classe <code>AlignedDimension</code> definisce una entity Dimension Aligned

 * @author Andrea Zonca
 * @author Michele Brignoli
 * @version 2.0
 */
@DXFElementType(value="DIMENSION", showClassName=false)
public class AlignedDimension extends Dimension {

	@DXFProperty(100)
	private String entityMarker="AcDbAlignedDimension";

	@DXFPointProperty(xCode=13,yCode=23,zCode=33)
	private DXFPoint start;

	@DXFPointProperty(xCode=14,yCode=24,zCode=34)
	private DXFPoint end;

	/**
	 * Crea un'istanza di AlignedDimension, impostando il punto di inizio della prima
	 * linea e della seconda linea.
	 *
	 * @param start il punto iniziale della prima linea della quotatura
	 * @param end il punto iniziale della seconda line della quotatura
	 */
	public AlignedDimension (DXFPoint start, DXFPoint end) {
		// Aligned (1) + 32 (required by ACAD).
		dimensionType=33;

		this.start=start;
		this.end=end;

		// We calculate the aligment vector.
		double x=end.X-start.X;
		double y = end.Y-start.Y;

		// We normalize then give it a length of five.
		double length = Math.sqrt(x*x+y*y)/10;


		x=x/length;
		y=y/length;

		// We interchange the components and apply the vector to the dimension endpooint.
		this.definitionPoint= new DXFPoint(end.X+y, end.Y-x , end.Z);

	}

	public String getEntityMarker(){
		return entityMarker;
	}

	/**
	 * Restituisce il punto iniziale della prima linea della quotatura
	 * @return il punto di inizio della prima linea
	 */
	public DXFPoint getStart(){
		return start;
	}

	/**
	 * Restituisce il punto di inizio della seconda linea della quotatura
	 * @return il punto di inizio della seconda linea
	 */
	public DXFPoint getEnd(){
		return end;
	}
}
